<?php

class ScheduleModel extends BaseModel {

    public function index() {
        $sch = $this->find_all("schedule AS sh LEFT JOIN lession AS l ON sh.lession_id = l.lession_id LEFT JOIN subject AS sb ON sh.subject_id = sb.subject_id LEFT JOIN classes AS c ON sh.classes_id = c.classes_id", "sh.dates ASC", "sh.dates >= NOW()", " sh.schedule_id, l.lession_name, l.theory, l.lab, sb.subject_name, sb.keyword AS keyword_subject, c.classname, c.keyword AS keyword_class, sh.dates");
        $this->viewModel->set("pageTitle", "Timetable");
        $this->viewModel->set("sch", $sch);

        $class = $this->find_all("classes AS cl LEFT JOIN courses AS co ON cl.courses_id = co.courses_id", "cl.classes_id DESC", "", "cl.classes_id, cl.classname, cl.keyword, cl.status, co.courses_name", "");
        $this->viewModel->set("class", $class);
        return $this->viewModel;
    }

    public function getDateToDate($fromDate = "", $endDate = "", $class = "") {
        $where = "";
        if (empty($fromDate) && empty($endDate)) {
            $where = "sh.dates >= NOW()";
        } else {
            $where = (empty($fromDate)) ? " sh.dates >= NOW() " : " sh.dates >= '" . substr($fromDate, 4) . "-" . substr($fromDate, 2, 2) . "-" . substr($fromDate, 0, 2) . "'";
            $where .= (empty($endDate)) ? "" : " AND sh.dates <= '" . substr($endDate, 4) . "-" . substr($endDate, 2, 2) . "-" . substr($endDate, 0, 2) . "'";
        }

        if (!empty($class)) {
            $where .= " AND sh.classes_id = {$class}";
        }

        //echo $where;
        //die();
        $sch = $this->find_all("schedule AS sh LEFT JOIN lession AS l ON sh.lession_id = l.lession_id LEFT JOIN subject AS sb ON sh.subject_id = sb.subject_id LEFT JOIN classes AS c ON sh.classes_id = c.classes_id", "sh.dates ASC", "{$where}", " sh.schedule_id, l.lession_name, l.theory, l.lab, sb.subject_name, sb.keyword AS keyword_subject, c.classname, c.keyword AS keyword_class, sh.dates");
        $this->viewModel->set("schJson", $sch);
        return $this->viewModel;
    }

    public function checkExist($class = "", $DateTime = "") {
        if ($class == -1 || $DateTime == "") {
            
        } else {
            $dateGet = substr($DateTime, 4) . "-" . substr($DateTime, 2, 2) . "-" . substr($DateTime, 0, 2);

            $where = "classes_id='" . $class . "' AND dates='" . $dateGet . "'";
//            $where2 = " AND subject_id='" . $Subject . "' AND lession_id='" . $Lession . "'";
            $sch = $this->find_all("schedule", "schedule_id DESC", $where, "*");
//            if (is_object($sch)) {
//                $this->viewModel->set("checkJson", $sch);
//                return $this->viewModel;
//            } else if(is_object($sch = $this->find_all("schedule", "schedule_id DESC", $where, "*"))) {
            $this->viewModel->set("checkJson", $sch);
            return $this->viewModel;
//            }
        }
    }

    public function create($data, $type = 1) {

        if (!empty($data)) {
            if ($type == 1) {
                $err = true;
                $dataSave = array();
                for ($i = 0; $i < $data['inputNumberOfLession']; $i++) {
                    $iptDate = "inputScheduleLession" . ($i + 1);
                    $iptLss = "lstLession" . ($i + 1);

                    $dataSave['classes_id'] = $data['classes_id'];
                    $dataSave['subject_id'] = $data['subject_id'];
                    if (empty($data[$iptLss])) {
                        continue;
                    } else {
                        $dataSave['lession_id'] = $data[$iptLss];
                        $dataSave['dates'] = Helper::convertDate($data[$iptDate]);
                        if (!$this->save("schedule", $dataSave, "")) {
                            $err = false;
                        }
                    }
                }
                return $err;
            } else if ($type == 2) {
                $err = false; // cần bổ sung phần thêm báo lỗi
                //type = 2, thêm vào 1 ngày nghỉ
                //thêm table lession 1 tiết có với subject_id bắt ra được lúc chọn
                $dataInsert = array();
                $dataInsert['lession_name'] = "#@@#@#@#@#" . $_POST['txtDayOff'];//#@@#@#@#@# chuỗi để phân biệt ngày nghĩ và 1 lession
                $dataInsert['theory'] = 0;
                $dataInsert['lab'] = 0;
                $dataInsert['subject_id'] = $_POST['getSubjectID'];
                $dataInsert['sortOrder'] = 0;
                $dataInsert['status'] = 1;
                //$key = true;
                $key = $this->save("lession", $dataInsert, ""); // trả về lession_id;
                if ($key) {
                    //lấy ra những tiết học có ngày bắt đầu từ $_POST['inputScheduleDateSubject']
                    $tempDate = Helper::convertDate($_POST['inputScheduleDateSubject']);
                    $tempClass = $this->find("classes", "classes_id ASC", "classes_id = '{$_POST['classes_id']}'", "params");
                    $decodeJson = json_decode($tempClass->params);
                    $arrDayOfWeek = $decodeJson->DayOfWeek; // lấy lại những thứ (Day Of Week) đã set cho lớp
                    $tempSCH = $this->find_all("schedule", "dates ASC", "dates >= '{$tempDate}'");

                    for ($i = 0; $i < count($tempSCH); $i++) {
                        $dataUpdate = array();
                        $idSCH = $tempSCH[$i]->schedule_id;
                        if ($i == count($tempSCH) - 1) {
                            //tách chuổi ngày lấy được từ database để đưa vào Object DateTime()
                            $spl = explode("-", $tempSCH[$i]->dates);
                            $CalDate = new DateTime();
                            $CalDate->setDate($spl[0], $spl[1], $spl[2]);
                            $CalDate->modify("+1 day");
                            while (true) {
                                $getDateOfWeek = $CalDate->format("w") + 1;
                                if (in_array($getDateOfWeek, $arrDayOfWeek)) {
                                    //kiểm tra nếu thứ (Date O Week) tồn tại trong array đã lấy được phía trên thì trả về ngày
                                    $rl = $CalDate->format('Y-m-d');
                                    break;
                                } else {
                                    $CalDate->modify("+1 day"); // tăng lên 1 ngày rồi chạy lại vòng lặp 
                                }
                            }
                            $dataUpdate['dates'] = $rl;
                        } else {
                            $tt = $i + 1;
                            $dataUpdate['dates'] = $tempSCH[$tt]->dates;
                        }
                        $this->save("schedule", $dataUpdate, "schedule_id = {$idSCH}");
                    }
                    //Lưu ngày lịch học bảng schedule
                    $dataSave = array();
                    $dataSave['classes_id'] = $_POST['classes_id'];
                    $dataSave['subject_id'] = $_POST['getSubjectID'];
                    $dataSave['lession_id'] = $key;
                    $dataSave['dates'] = Helper::convertDate($_POST['inputScheduleDateSubject']);
                    return $this->save("schedule", $dataSave, "");
                }
            } else if ($type == 3) {
                //thêm vào 1 tiết học;

                $dataSave = array();
                $dataSave['classes_id'] = $data['classes_id'];
                $dataSave['subject_id'] = $data['subject_id'];
                $dataSave['lession_id'] = $data['lession_id'];
                $dataSave['dates'] = Helper::convertDate($data['inputScheduleDateSubject']);
                return $this->save("schedule", $dataSave, "");
            }
        }
        $cls = $this->find_all("classes", "classes_id DESC", "", "classes_id, classname, params");
        $this->viewModel->set("pageTitle", "Create");
        $this->viewModel->set("cls", $cls);
        return $this->viewModel;
    }

    public function edit($id, $data) {
        if (!empty($data)) {
            return $this->save("schedule", $data, "schedule_id = {$id}");
        }


        //get data from table schedule
        $sch = $this->find_all("schedule AS sh LEFT JOIN lession AS l ON sh.lession_id = l.lession_id LEFT JOIN subject AS sb ON sh.subject_id = sb.subject_id LEFT JOIN classes AS c ON sh.classes_id = c.classes_id", "sh.dates ASC", "sh.schedule_id = {$id}", " sh.schedule_id, l.lession_name, l.theory, l.lab, sb.subject_name, sb.keyword AS keyword_subject, c.classname, c.keyword AS keyword_class, sh.dates");


        $this->viewModel->set("scheduleUpdate", $sch);
        //get data from table subject
        $sbj = $this->find_all("subject", "subject_id ASC", "", "subject_id, subject_name");
        $this->viewModel->set("subjectUpdate", $sbj);

        //get data from table class
        $cls = $this->find_all("classes", "classes_id ASC", "", "classes_id, classname");
        $this->viewModel->set("classUpdate", $cls);

        //get data from table lession

        $lss = $this->find_all("lession", "sortOrder ASC", "", "lession_id, lession_name");
        $this->viewModel->set("lessionUpdate", $lss);

        $this->viewModel->set("pageTitle", "Update");
        return $this->viewModel;
    }

}
